Computer systems typically utilize a layered approach for implementing functionalities relating to communications frameworks where a layer is a program module for processing different portions of data traveling from a producer to a consumer. Each protocol (e.g., TCP, IP, etc.) is implemented as a layer and each connection can be visualized as a layer of protocol modules through which each incoming or outgoing packet has to pass. Each layer examines the data to determine if any work needs to be performed by that layer before sending the data to the next layer.
Conventional accept mechanisms process new connections on the listener and the three-way handshake and connection indication are done in the listener context. The messages used to perform the accept of a new connection are sent on the listener stream and the listener stream is single threaded during the accept process. As a result, the listener can become a bottleneck during times of heave traffic because the listener can not accept new connections while processing other connections.